/**
 * 异步回调
 */
var im = {
    Callback:[],
    WebSocket:null,
};
/**
 * 合并数据
 * @param obj1
 * @param obj2
 * @returns {*}
 */
var mareg_data = function(obj1,obj2)
{
    for(var key in obj2){
        if(obj2.hasOwnProperty(key)===true){
            //此处hasOwnProperty是判断自有属性，使用 for in 循环遍历对象的属性时，原型链上的所有属性都将被访问会避免原型对象扩展带来的干扰
            obj1[key]=obj2[key];
        }
    }
    return obj1;
}
/**
 * 生成随机数
 * @param len
 * @returns {string}
 */
function randomString(len)
{
    len = len || 32;
    var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';    /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
    var maxPos = $chars.length;
    var pwd = '';
    for (i = 0; i < len; i++) {
        pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
    }
    return pwd;
}
/**
 * 发起请求
 */
var ws_api_request = function(params)
{
    if(typeof params.app == "undefined"){
        params.app = "";
    }
    if(typeof params.controller == "undefined"){
        params.controller = "";
    }
    if(typeof params.success == "undefined"){
        params.success = function(res){

        };
    }
    /**
     * 定义路由组
     */
    var route = {
        "app":params.app,
        "controller":params.controller,
        "action":params.action,
    };
    /**
     * 判断是否要传递数据
     */
    if(typeof params.data != "undefined"){
        // 合并数据
        var RequestData = mareg_data(route,params.data);
    }else{
        var RequestData = route;
    }
    /**
     * 定义请求随机id
     */
    var request_id;
    do{
        /**
         * 生成请求id
         */
        request_id = randomString(32);
    }while (typeof im.Callback[request_id] != "undefined");
    /**
     * 增加请求id
     */
    RequestData.request_id = request_id;
    /**
     * 判断是否有回调设置
     */
    im.Callback[request_id] = params.success;
    /**
     * 发送数据
     */
    im.WebSocket.send(JSON.stringify(RequestData));
}

/**
 * token:1,
 * onOpen:2,
 * onMessage:2,
 * onclose:2,
 * ws 链接
 */
var ws_connection = function(param)
{
    if ("WebSocket" in window) {
        /**
         * token 兼容
         */
        if(typeof param.token == 'undefined'){
            param.token = '';
        }
        /**
         * 链接
         * @type {WebSocket}
         */
        // im.WebSocket = new WebSocket('wss://im-service.open-cloud-api.com/?token=' + param.token);
        im.WebSocket = new WebSocket('ws://47.52.172.66/?token=' + param.token);
        /**
         * 判断是否链接成功 是否设置回调
         */
        if(typeof param.onOpen == 'undefined'){
            /**
             * 设置链接成功回调
             */
            im.WebSocket.onopen = function () {
                console.log('链接成功');
            };
        }else{
            /**
             * 设置链接成功回调
             */
            im.WebSocket.onopen = param.onOpen;
        }
        /**
         * 设置消息到达处理程序
         * @param evt
         */
        im.WebSocket.onmessage = function (evt) {
            /**
             * 转换数据
             * @type {any}
             */
            var message_data = JSON.parse(evt.data);
            /**
             * 监听异步回调
             */
            if(typeof message_data.request_id != "undefined"){
                im.Callback[message_data.request_id](message_data);
            }
            /**
             * 判断是否有自定义的回调
             */
            if(typeof param.onMessage != 'undefined'){
                /**
                 * 回调
                 */
                param.onMessage(message_data);
            }
        };
        /**
         * 判断是否设置了 连接关闭回调
         */
        if(typeof param.onClose != 'undefined'){
            im.WebSocket.onclose = function () {
                param.onClose();
            };
        }
    }
}
/**
 * 发送消息
 */
var send_message = function (body) {
    /**
     * 请求接口
     */
    ws_api_request({
        app:"Message",
        controller:"Text",
        action:"send",
        data:{
            "body":body,
            "message_type":1,
            "to_type":1,
            "to_id":1,
        },
        success:function(res){
            if(res.status == 200){
                alert('发送成功');
            }else{
                alert('发送失败');
            }
            console.log(res);
        }
    })
    $('#content').val('');
}